home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d6 / amort.arc / AMORTIZE.BAS next >
BASIC Source File  |  1988-11-09  |  11KB  |  315 lines

  1. 10 KEY 10,"EDIT ":KEY OFF
  2. 20 REM ============
  3. 30 REM  AMORTIZE.BAS
  4. 40 REM  MODIFIED FOR USE ON SANYO MBC 550 SERIES COMPUTER
  5. 50 REM  BY George Vigneron 11-07-88
  6. 60 REM ============
  7. 65 DD$ = ""
  8. 70 CLEAR:U$="$$###,###.##":DIM MO$(12)
  9. 80 DATA Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
  10. 90 FOR X=1 TO 12:READ MO$(X):NEXT X
  11. 100 GOTO 140
  12. 110 A$=INKEY$:IF A$="" THEN 110
  13. 120 IF ASC(A$)>96 AND ASC(A$)<123 THEN A$=CHR$(ASC(A$)-32)
  14. 130 RETURN
  15. 140 CLS:DEF FNA(N9)=(1!-(R2+1!)^(-N9))/R2
  16. 150 DEF FNR(Z9)=ABS(.01*INT(Z9*100!+.5))
  17. 160 PRINT STRING$(79,205)
  18. 170 A$="Loan Amortization Program":LOCATE 2,40-(LEN(A$)/2)
  19. 180 PRINT A$
  20. 190 PRINT STRING$(79,205)
  21. 200 PRINT :PRINT"Do you wish a description ?   Type (Y/N)"
  22. 220 GOSUB 110:LOCATE 8,1,0
  23. 230 IF A$="N" THEN 330
  24. 240 IF A$<>"Y" THEN LOCATE 1,1,1:GOTO 220
  25. 250 CLS
  26. 260 PRINT"This program computes mortgage loan values and"
  27. 270 PRINT"will print an amortization schedule given any"
  28. 280 PRINT"three of the four loan values:"
  29. 290 PRINT"1) Intrest rate"
  30. 300 PRINT"2) Monthly payment"
  31. 310 PRINT"3) Life of the loan"
  32. 320 PRINT"4) Amount of the loan"
  33. 330 PRINT :PRINT"Enter values for ";
  34. 340 PRINT"3 of the ";
  35. 350 PRINT"4 following inputs"
  36. 360 PRINT"and a zero for the one you wish computed...."
  37. 370 PRINT :INPUT"Amount of the loan"; A2
  38. 380 A2=ABS(A2)
  39. 390 INPUT"Monthly payment"; P2
  40. 400 P2=ABS(P2)
  41. 410 PRINT"Intrest rate  (e.g.  5 1/4% would be  5.25)";
  42. 420 INPUT R2
  43. 430 A3=ABS(R2):R2=A3/1200
  44. 440 PRINT"Life of the loan  (e.g. 8 years 2 months would be  8.02)";
  45. 450 INPUT L1
  46. 460 L1=ABS(L1):Y2=INT(L1):M2=INT(100*(L1-Y2) +.9)
  47. 470 PRINT"Enter date of 1st. payment (MMYYYY)";
  48. 480 INPUT MA$
  49. 490 MA=VAL(LEFT$(MA$,2))
  50. 500 YA=VAL(RIGHT$(MA$,2))
  51. 510 IF MA<1 OR MA>12 THEN 470
  52. 520 IF M2<12 THEN 550
  53. 530 PRINT"Invalid input-Try Again!"
  54. 540 GOTO 440
  55. 550 CLS:N2=12*Y2+M2
  56. 560 K3=0
  57. 570 IF R2<>0 THEN 590
  58. 580 K3=K3+1
  59. 590 IF P2<>0 THEN 610
  60. 600 K3=K3+1
  61. 610 IF N2<>0 THEN 630
  62. 620 K3=K3+1
  63. 630 IF A2<>0 THEN 650
  64. 640 K3=K3+1
  65. 650 IF K3=1 THEN 690
  66. 660 PRINT
  67. 670 PRINT"Sorry, I don't know which one to compute."
  68. 680 GOTO 330
  69. 690 PRINT
  70. 700 PRINT
  71. 710 IF R2=0 THEN 930
  72. 720 IF A2=0 THEN 1160
  73. 730 IF P2=0 THEN 1200
  74. 740 IF P2*FNA(1)<=A2 THEN 770
  75. 750 PRINT" ","Life of the loan is less than 1 month!"
  76. 760 GOTO 330
  77. 770 FOR N1=1 TO 9999 STEP 12
  78. 780 A1=P2*FNA(N1)
  79. 790 IF A1>A2 THEN 820
  80. 800 IF A1=A2 THEN 870
  81. 810  NEXT N1
  82. 820 J=N1-11
  83. 830 FOR N2=J TO N1
  84. 840 A1=P2*FNA(N2)
  85. 850 IF A1>=A2 THEN 880
  86. 860 NEXT N2
  87. 870 N2=N1
  88. 880 Y2=INT(N2/12)
  89. 890 M2=INT(N2-12*Y2)
  90. 900 PRINT" ","Loan period is";:PRINT Y2
  91. 910 PRINT"years ;PRINT M2;PRINT" MONTHS."
  92. 920 GOTO 1240
  93. 930 IF P2*N2>=A2 THEN 970
  94. 940 PRINT" ,Loan can not be repaid at"
  95. 950 PRINT USING U$;P2;:PRINT"a month."
  96. 960 GOTO 330
  97. 970 X=0
  98. 980 IF P2*N2<=A2 THEN 1120
  99. 990 FOR I=1 TO 9999
  100. 1000 R2=I/1200
  101. 1010 A1=P2*FNA(N2)
  102. 1020 IF A1<A2 THEN 1070
  103. 1030 IF A1<>A2 THEN 1060
  104. 1040 X=I
  105. 1050 GOTO 1120
  106. 1060 NEXT I
  107. 1070 X=I-.99
  108. 1080 X=X+.001
  109. 1090 R2=X/1200
  110. 1100 A1=P2*FNA(N2)
  111. 1110 IF A1-.00001*A2>A2 THEN 1080
  112. 1120 R2=X/1200
  113. 1130 A3=.001*INT(1000*(X+.0005))
  114. 1140 PRINT" ","Annual intrest rate is";:PRINT A3;:PRINT"%"
  115. 1150 GOTO 1240
  116. 1160 A2=P2*FNA(N2)
  117. 1170 A8=FNR(A2)
  118. 1180 PRINT" ","Amount of loan is";:PRINT USING U$;A8
  119. 1190 GOTO 1210
  120. 1200 P2=A2/FNA(N2)
  121. 1210 P8=FNR(P2)
  122. 1220 PRINT"Monthly payment is";
  123. 1230 PRINT USING U$; P8
  124. 1240 I2=P8*N2-A2
  125. 1250 PRINT"Total intrest on loan is";
  126. 1260 PRINT USING U$; FNR(I2)
  127. 1270 PRINT :PRINT
  128. 1280 PRINT"Do you wish an amortization schedule ?  Type (";
  129. 1290 PRINT"Y/N)"
  130. 1300 GOSUB 110
  131. 1310 IF A$="Y" THEN 1390
  132. 1320 IF A$<>"N" THEN 1300
  133. 1330 PRINT"Another analysis ?    Type (Y/N)"
  134. 1340 GOSUB 110
  135. 1350 IF A$="Y" THEN PRINT :GOTO 330
  136. 1360 IF A$<>"N" THEN 1340
  137. 1370 CLS:PRINT"E N D   M O R G A G E"
  138. 1380 END
  139. 1390 PRINT
  140. 1400 PRINT"Type 1";
  141. 1410 PRINT" for annual table,   ";
  142. 1420 PRINT"2 for monthly table."
  143. 1430 GOSUB 110:K2=VAL(A$)
  144. 1440 IF K2<1 OR K2>2 THEN 1430
  145. 1450 PRINT :PRINT"Direct output to <S";
  146. 1460 PRINT">creen or <P";
  147. 1470 PRINT">rinter":GOSUB 110:CLOSE
  148. 1480 IF A$="S" THEN ZZ = 1
  149. 1490 IF A$="P" THEN ZZ = 2
  150. 1500 CLS
  151. 1504 IF ZZ = 1 THEN PRINT STRING$(79,"=")
  152. 1508 IF ZZ = 2 THEN LPRINT STRING$(79,"=")
  153. 1510 A$="***  Mortgage Table  ***"
  154. 1520 IF ZZ = 1 THEN PRINT TAB(40-(LEN(A$)/2)) A$
  155. 1530 IF ZZ = 2 THEN LPRINT TAB(40-(LEN(A$)/2)) A$
  156. 1540 IF ZZ = 1 THEN PRINT STRING$(79,"=")
  157. 1550 IF ZZ = 2 THEN LPRINT STRING$(79,"=")
  158. 1560 A8=FNR(A2)
  159. 1570 IF ZZ = 1 THEN PRINT "Amount of loan";
  160. 1574 IF ZZ = 1 THEN PRINT USING U$;A8;
  161. 1580 IF ZZ = 2 THEN LPRINT "Amount of loan";
  162. 1587 IF ZZ = 2 THEN LPRINT USING U$;A8;
  163. 1590 IF ZZ = 1 THEN PRINT TAB(50)"Annual intrest rate";
  164. 1600 IF ZZ = 2 THEN LPRINT TAB(50)"Annual intrest rate";
  165. 1610 IF ZZ = 1 THEN PRINT A3;
  166. 1620 IF ZZ = 2 THEN LPRINT A3;
  167. 1630 IF ZZ = 1 THEN PRINT "%"
  168. 1640 IF ZZ = 2 THEN LPRINT "%"
  169. 1650 P8=FNR(P2)
  170. 1660 IF ZZ = 1 THEN PRINT "Monthly payment";
  171. 1665 IF ZZ = 2 THEN LPRINT "Monthly payment";
  172. 1670 IF ZZ = 1 THEN PRINT USING U$; P8
  173. 1675 IF ZZ = 2 THEN LPRINT USING U$; P8
  174. 1680 IF ZZ = 1 THEN PRINT TAB(50)"Repaid in";
  175. 1685 IF ZZ = 2 THEN LPRINT TAB(50)"Repaid in";
  176. 1690 IF ZZ = 1 THEN PRINT Y2;
  177. 1695 IF ZZ = 2 THEN LPRINT Y2;
  178. 1700 IF ZZ = 1 THEN PRINT "years";
  179. 1705 IF ZZ = 2 THEN LPRINT "years";
  180. 1710 IF ZZ = 1 THEN PRINT M2;
  181. 1715 IF ZZ = 2 THEN LPRINT M2;
  182. 1720 IF ZZ = 1 THEN PRINT "months"
  183. 1725 IF ZZ = 2 THEN LPRINT "months"
  184. 1730 IF ZZ = 1 THEN PRINT "Total interest";
  185. 1735 IF ZZ = 2 THEN LPRINT "Total interest";
  186. 1740 IF ZZ = 1 THEN PRINT USING U$; FNR(I2)
  187. 1745 IF ZZ = 2 THEN LPRINT USING U$; FNR(I2)
  188. 1750 IF ZZ = 1 THEN PRINT"Press any key to get amorization schedule."ELSE GOTO 1780
  189. 1760 GOSUB 110
  190. 1770 CLS
  191. 1780 GOSUB 2640
  192. 1790 M=0:E=0:DEC=1900
  193. 1800 K=0:K1=0:K3=0
  194. 1810 A1=A2:MA=MA-1:YA=YA+DEC
  195. 1820 T1=0:PL=0
  196. 1830 T2=0
  197. 1840 FOR J=1 TO N2
  198. 1850 K1=K1+1:K=K+1
  199. 1860 MA=MA+1:P9=P9+P8
  200. 1870 IF MA>12 THEN MA=MA-12:YA=YA+1:IF YA>DEC+100 THEN DEC=DEC+100
  201. 1880 X7=FNR(A1*R2)
  202. 1890 P7=P2-X7
  203. 1900 IF P7<=A1 THEN 1920
  204. 1910 P7=A1
  205. 1920 T1=T1+X7
  206. 1930 T2=T2+P7
  207. 1940 A1=A1-P7
  208. 1950 IF K2=1 THEN 2060
  209. 1960 IF P7+X7=0 THEN 2080
  210. 1970 D1=FNR(A1)
  211. 1980 D2=FNR(P7)
  212. 1990 D3=FNR(X7)
  213. 2000 IF ZZ = 1 THEN PRINT TAB(1)MO$(MA);" '";STR$(YA);"->";
  214. 2005 IF ZZ = 2 THEN LPRINT TAB(1)MO$(MA);" '";STR$(YA);"->";
  215. 2010 IF ZZ = 1 THEN PRINT TAB(16) DD$;: PRINT USING U$;D1;
  216. 2015 IF ZZ = 2 THEN LPRINT TAB(16) DD$;: LPRINT USING U$;D1;
  217. 2020 IF ZZ = 1 THEN PRINT TAB(32) DD$;: PRINT USING U$;P8;
  218. 2025 IF ZZ = 2 THEN LPRINT TAB(32) DD$;: LPRINT USING U$;P8;
  219. 2030 IF ZZ = 1 THEN PRINT TAB(48) DD$;: PRINT USING U$;D2;
  220. 2035 IF ZZ = 2 THEN LPRINT TAB(48) DD$;: LPRINT USING U$;D2;
  221. 2040 IF ZZ = 1 THEN PRINT TAB(64) DD$;: PRINT USING U$;D3
  222. 2045 IF ZZ = 2 THEN LPRINT TAB(64) DD$;: LPRINT USING U$;D3
  223. 2050 PL=PL+1
  224. 2060 IF MO$(MA)="Dec" THEN K1=12:GOTO 2080
  225. 2070 IF K<12 THEN 2260
  226. 2080 M=M+1
  227. 2090 IF A1+T1+T2=0 THEN 2200
  228. 2100 D1=FNR(A1)
  229. 2110 D2=FNR(T2)
  230. 2120 D3=FNR(T1)
  231. 2130 IF K2=2 THEN IF ZZ = 1 THEN PRINT STRING$(79,"-")
  232. 2135 IF K2=2 THEN IF ZZ = 2 THEN LPRINT STRING$(79,"-")
  233. 2140 IF ZZ = 1 THEN PRINT TAB(1)YA;"Totals";
  234. 2145 IF ZZ = 2 THEN LPRINT TAB(1)YA;"Totals";
  235. 2150 IF ZZ = 1 THEN PRINT TAB(16) DD$;: PRINT USING U$; D1;
  236. 2155 IF ZZ = 2 THEN LPRINT TAB(16) DD$;: LPRINT  USING U$; D1;
  237. 2160 IF ZZ = 1 THEN PRINT TAB(32) DD$;: PRINT  USING U$; P9;
  238. 2165 IF ZZ = 2 THEN LPRINT TAB(32) DD$;: LPRINT  USING U$; P9;
  239. 2170 IF ZZ = 1 THEN PRINT TAB(48) DD$;: PRINT  USING U$; D2;
  240. 2175 IF ZZ = 2 THEN LPRINT TAB(48) DD$;: LPRINT  USING U$; D2;
  241. 2180 IF ZZ = 1 THEN PRINT TAB(64) DD$;: PRINT  USING U$; D3;
  242. 2185 IF ZZ = 2 THEN LPRINT TAB(64) DD$;: LPRINT USING U$; D3;
  243. 2190 IF K2=2 AND ZZ = 1 THEN PRINT STRING$(79,"-")
  244. 2195 IF K2=2 AND ZZ = 2 THEN LPRINT STRING$(79,"-")
  245. 2200 PL=PL+1
  246. 2210 T1=0:T2=0:P9=0
  247. 2220 K=0:K3=K3+1
  248. 2230 IF ZZ = 1 AND K2=2 AND K1>11 THEN GOSUB 2440
  249. 2240 IF ZZ = 1 AND K2=1 AND K3>14 THEN GOSUB 2440
  250. 2250 IF ZZ = 2 AND PL>30 THEN PL=0:LPRINT CHR$(12):GOSUB 2640
  251. 2260 NEXT J:IF K2=1 OR MO$(MA)="Dec" THEN 2380
  252. 2270 D1=FNR(A1)
  253. 2280 D2=FNR(T2)
  254. 2290 D3=FNR(T1)
  255. 2300 LOCATE 20,1
  256. 2305 IF ZZ = 1 THEN PRINT STRING$(79,"-")
  257. 2310 IF ZZ = 2 THEN LPRINT STRING$(79,"-")
  258. 2320 IF ZZ = 1 THEN PRINT TAB(1)YA;"Totals";
  259. 2325 IF ZZ = 2 THEN LPRINT TAB(1)YA;"Totals";
  260. 2330 IF ZZ = 1 THEN PRINT TAB(16) DD$;: PRINT  USING U$; D1;
  261. 2335 IF ZZ = 2 THEN LPRINT TAB(16) DD$;: LPRINT  USING U$; D1;
  262. 2340 IF ZZ = 1 THEN PRINT TAB(32) DD$;: PRINT  USING U$; P9;
  263. 2345 IF ZZ = 2 THEN LPRINT TAB(32) DD$;: LPRINT  USING U$; P9;
  264. 2350 IF ZZ = 1 THEN PRINT TAB(48) DD$;: PRINT  USING U$; D2;
  265. 2355 IF ZZ = 2 THEN LPRINT TAB(48) DD$;: LPRINT  USING U$; D2;
  266. 2360 IF ZZ = 1 THEN PRINT TAB(64) DD$;: PRINT  USING U$; D3;
  267. 2365 IF ZZ = 2 THEN LPRINT TAB(64) DD$;: LPRINT  USING U$; D3;
  268. 2370 IF ZZ = 2 THEN LPRINT STRING$(79,"-")
  269. 2375 IF ZZ = 1 THEN PRINT STRING$(79,"-")
  270. 2380 IF ZZ = 2 THEN LPRINT CHR$(12):GOTO 1330
  271. 2390 LOCATE 23,1:PRINT SPC(79);:LOCATE 24,1
  272. 2400 PRINT"Press ";
  273. 2410 PRINT CHR$(17)+CHR$(196)+CHR$(217);:PRINT" to continue";
  274. 2420 A$=INKEY$:IF A$="" THEN 2420
  275. 2430 CLS:GOTO 1330
  276. 2440 LOCATE 23,19
  277. 2450 PRINT "Press "; CHR$(17)+CHR$(196)+CHR$(217);
  278. 2460 PRINT " to continue, <M> for Menu "
  279. 2480 A$=INKEY$:IF A$="" THEN 2480
  280. 2490 IF ASC(A$)=13 THEN K1=0:K3=0:GOTO 2590
  281. 2500 IF A$="M" OR A$="m" THEN 2510 ELSE GOTO 2480
  282. 2510 LOCATE 23,1:PRINT SPC(79):LOCATE 24,1:PRINT SPC(79):LOCATE 23,19
  283. 2520 PRINT"Compute another Amorization Schedule (Y/N)"
  284. 2550 GOSUB 110
  285. 2560 IF A$="Y" THEN CLS:GOTO 330
  286. 2570 IF A$<>"N" THEN 2550
  287. 2580 GOTO 1370
  288. 2590 IF K2=2 THEN COL=22
  289. 2600 IF K2=1 THEN COL=20
  290. 2610 IF J=N2 THEN 2380
  291. 2620 FOR X=7 TO COL:LOCATE X,1
  292. 2624 IF ZZ = 1 THEN PRINT SPACE$(79);
  293. 2626 IF ZZ = 2 THEN LPRINT SPACE$(79);
  294. 2628 NEXT X
  295. 2630 LOCATE 7,1:RETURN
  296. 2640 IF ZZ = 1 THEN PRINT STRING$(79,"="):A$="Amorization schedule"
  297. 2645 IF ZZ = 2 THEN LPRINT STRING$(79,"="):A$="Amorization schedule"
  298. 2650 IF ZZ = 1 THEN PRINT TAB(40-(LEN(A$)/2)) A$
  299. 2655 IF ZZ = 2 THEN LPRINT TAB(40-(LEN(A$)/2)) A$
  300. 2660 IF ZZ = 1 THEN PRINT STRING$(79,"=")
  301. 2665 IF ZZ = 2 THEN LPRINT STRING$(79,"=")
  302. 2670 IF ZZ = 1 THEN PRINT TAB(1)"Payment";TAB(19)" Ending";
  303. 2675 IF ZZ = 2 THEN LPRINT TAB(1)"Payment";TAB(19)" Ending";
  304. 2680 IF ZZ = 1 THEN PRINT TAB(37)"Payment";TAB(52)"Principal";TAB(69)"Interest"
  305. 2685 IF ZZ = 2 THEN LPRINT TAB(37)"Payment";TAB(52)"Principal";TAB(69)"Interest"
  306. 2690 IF ZZ = 1 THEN PRINT TAB(1)"Date";TAB(19)"Principal";
  307. 2695 IF ZZ = 2 THEN LPRINT TAB(1)"Date";TAB(19)"Principal";
  308. 2700 IF ZZ = 1 THEN PRINT TAB(37)"Amount";TAB(52)"  Paid";TAB(69)"  Paid"
  309. 2705 IF ZZ = 2 THEN LPRINT TAB(37)"Amount";TAB(52)"  Paid";TAB(69)"  Paid"
  310. 2710 IF ZZ = 1 THEN PRINT STRING$(79,"=")
  311. 2715 IF ZZ = 2 THEN LPRINT STRING$(79,"=")
  312. 2720 RETURN
  313. )"  Paid";TAB(69)"  Paid"
  314. 2710 IF ZZ = 1 THEN PRINT STRING$(79,"=")
  315. 2715 IF